package graph

import (
	"github.com/tidwall/btree"
)

// NewVertex 创建一个顶点
func NewVertex(in, out *ConnectionPoint) *Vertex {
	return &Vertex{
		In:               in,
		Out:              out,
		AdjacentVertexes: btree.NewBTreeG[*Item](ItemLess),
	}
}

// Name 返回顶点的名称（具有唯一性）
func (v *Vertex) GetName() string {
	return MergeName(v.In.Name, v.Out.Name)
}

// Equal 比较两个顶点是否相等
//
// 分别对比In端点，Out端点
func (v *Vertex) Equal(vertex *Vertex) bool {
	return v.In.Equal(vertex.In) && v.Out.Equal(vertex.Out)
}

// AddAdjacent 添加邻接顶点
func (v *Vertex) AddAdjacent(vertex *Vertex) {
	v.AdjacentVertexes.Set(NewItem(vertex.GetName(), vertex, nil))
}

// DeleteAdjacent 删除邻接顶点
func (v *Vertex) DeleteAdjacent(vertex *Vertex) {
	v.AdjacentVertexes.Delete(NewItem(vertex.GetName(), vertex, nil))
}

// GetConnectionPointPrior 返回连接端点对（入端点，出端点）
func (v *Vertex) GetConnectionPointPrior() (*ConnectionPoint, *ConnectionPoint) {
	return v.In, v.Out
}
